package org.finesys.ai.controller;

import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import lombok.RequiredArgsConstructor;
import org.finesys.ai.constants.AigcControllerRestApiConfig;
import org.finesys.ai.entity.AigcOss;
import org.finesys.ai.service.AigcOssService;
import org.finesys.common.core.constants.RestApiConfig;
import org.finesys.common.core.module.R;
import org.finesys.common.log.core.annotation.LogAnnotation;
import org.finesys.common.log.core.enums.OperateType;
import org.springframework.http.HttpHeaders;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.Arrays;

@RestController
@RequestMapping(value = AigcControllerRestApiConfig.AIGC_OSS)
@RequiredArgsConstructor
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
public class AigcOssController {
    private final AigcOssService aigcOssService;


    /**
     * 上传文件接口
     * 该接口用于处理文件上传请求，将文件上传到OSS服务，并返回上传结果。
     *
     * @param file 要上传的文件，类型为MultipartFile
     * @return 返回R类型的对象，包含上传操作的结果
     * @throws Exception 如果上传过程中发生异常，则抛出Exception异常
     */
    @PostMapping(value = RestApiConfig.UPLOAD)
    @LogAnnotation(title = "上传OSS文件", operateType = OperateType.IMPORT)
    public R<?> upload(MultipartFile file) throws Exception {
        return R.judge(aigcOssService.upload(file));
    }


    /**
     * 更新OSS文件资源接口
     * 该接口用于更新OSS文件资源信息
     *
     * @param data 包含更新信息的AigcOss对象
     * @return 返回操作结果对象R
     */
    @PutMapping(value = RestApiConfig.UPDATE)
    @LogAnnotation(title = "更新OSS文件资源", operateType = OperateType.UPDATE)
    public R<?> update(@RequestBody AigcOss data) {
        return R.judge(aigcOssService.updateById(data));
    }

    /**
     * 删除OSS文件资源接口
     * 根据提供的ID数组，删除对应的OSS文件资源
     *
     * @param ids 要删除的OSS文件资源ID数组
     * @return 返回操作结果，成功或失败的相关信息
     */
    @DeleteMapping(value = RestApiConfig.DELETE)
    @LogAnnotation(title = "删除OSS文件资源", operateType = OperateType.DELETE)
    public R<?> delete(@PathVariable String[] ids) {
        return R.judge(aigcOssService.removeBatchByIds(Arrays.asList(ids)));
    }
}
